home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / MATH.SWG / 0083_Complex Number Manipulation.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-03  |  4KB  |  127 lines

  1. {
  2. I wrote the following program for an introductory computer science course.
  3. It was written in Turbo Pascal, but I believe everything in it is standard,
  4. so it should work fine with Think Pascal.
  5. pgriswold@delphi.com
  6. }
  7.  
  8. type
  9.     ComplexType = record          {Complex number ADT}
  10.         RealPart      : real;     {Real portion of complex number}
  11.         ImaginaryPart : real;     {Imaginary part of complex number}
  12.     end;
  13.  
  14. var
  15.     Complex1,                     {First complex number}
  16.     Complex2,                     {Second complex number}
  17.     Result : ComplexType;         {Result of current operation}
  18.  
  19.  
  20. procedure OutputNumber(ComplexNumber : ComplexType);
  21. {  Displays complex number in a+bi format.
  22.  
  23.     Pre Condition:  ComplexNumber is defined;
  24.    Post Condition:  Complex number is written to the screen in a+bi format
  25. }
  26. begin {OutputNumber}
  27.     writeln(ComplexNumber.RealPart:0:4,' + ',ComplexNumber.ImaginaryPart:0:4,
  28. 'i');
  29. end;  {OutputNumber}
  30.  
  31.  
  32.  
  33. function Magnitude(ComplexNumber : ComplexType) : real;
  34. {  Determines the magnitude of a complex number.
  35.  
  36.     Pre Condition:  ComplexNumber is defined;
  37.    Post Condition:  Magnitude of complex number is returned.
  38. }
  39. begin  {Magnitude}
  40.     Magnitude :=
  41. sqrt(sqr(ComplexNumber.RealPart)+sqr(ComplexNumber.ImaginaryPar
  42. t));
  43. end;   {Magnitude}
  44.  
  45.  
  46.  
  47. procedure AddComplex(Complex1,Complex2 : ComplexType;
  48.                      var Result : ComplexType);
  49. {   Adds two complex numbers.
  50.  
  51.      Pre Condition:  Complex1 and Complex2 are defined;
  52.     Post Condition:  Result contains the sum of Complex1 and Complex2
  53. }
  54. begin  {AddComplex}
  55.     Result.RealPart := Complex1.RealPart + Complex2.RealPart;
  56.     Result.ImaginaryPart := Complex1.ImaginaryPart + Complex2.ImaginaryPart;
  57. end;   {AddComplex}
  58.  
  59.  
  60.  
  61. procedure MultiplyComplex(Complex1,Complex2 : ComplexType;
  62.                           var Result : ComplexType);
  63. {   Multiplies two complex numbers.
  64.  
  65.      Pre Condition:  Complex1 and Complex2 are defined;
  66.     Post Condition:  Result contains the product of Complex1 and Complex2
  67. }
  68. begin  {MultiplyComplex}
  69.     Result.RealPart := Complex1.RealPart * Complex2.RealPart -
  70.         Complex1.ImaginaryPart * Complex2.ImaginaryPart;
  71.     Result.ImaginaryPart := Complex1.Realpart * Complex2.ImaginaryPart +
  72.         Complex2.RealPart * Complex1.ImaginaryPart;
  73. end;   {MultiplyComplex}
  74.  
  75.  
  76.  
  77. procedure DivideComplex(Complex1, Complex2 : ComplexType;
  78.                         var Result : ComplexType);
  79. {   Divides two complex numbers.
  80.  
  81.      Pre Condition:  Complex1 and Complex2 are defined;
  82.     Post Condition:  Result contains the quotient of Complex1 and Complex2
  83. }
  84.  
  85. var tmp1, tmp2 : real;  {temporary variables}
  86.  
  87. begin   {DivideComplex}
  88.  
  89.     Tmp1 := sqr(Complex2.RealPart) + sqr(Complex2.ImaginaryPart);
  90.     Tmp2 := (Complex1.RealPart * Complex2.RealPart +
  91.         Complex1.ImaginaryPart * Complex2.ImaginaryPart)/Tmp1;
  92.     Result.ImaginaryPart := (Complex1.ImaginaryPart * Complex2.RealPart +
  93.         Complex1.RealPart * Complex2.ImaginaryPart)/Tmp1;
  94.     Result.RealPart := tmp2;
  95. end;   {DivideComplex}
  96.  
  97.  
  98.  
  99. begin  {driver}
  100.     write('Enter Real Part of a:      ');
  101.     readln(Complex1.RealPart);
  102.     write('Enter Imaginary Part of a: ');
  103.     readln(Complex1.ImaginaryPart);
  104.     writeln;
  105.  
  106.     write('Enter Real Part of b:      ');
  107.     readln(Complex2.RealPart);
  108.     write('Enter Imaginary Part of b: ');
  109.     readln(Complex2.ImaginaryPart);
  110.     writeln;
  111.  
  112.     AddComplex(Complex1,Complex2,Result);
  113.     write('Sum is ');
  114.     OutputNumber(Result);
  115.  
  116.     MultiplyComplex(Complex1,Complex2,Result);
  117.     write('Product is ');
  118.     OutputNumber(Result);
  119.  
  120.     DivideComplex(Complex1,Complex2,Result);
  121.     write('Quotient is ');
  122.     OutputNumber(Result);
  123.  
  124.     writeln('Magnitude of a is ',Magnitude(Complex1):0:4);
  125.     writeln('Magnitude of b is ',Magnitude(Complex2):0:4);
  126. end.  {driver}
  127.